//
//  OAuthViewController.swift
//  sinaWeiBo
//
//  Created by smartlei on 15/10/16.
//  Copyright © 2015年 smartlei. All rights reserved.
//

import UIKit
import SVProgressHUD

class OAuthViewController: UIViewController {
    
    private lazy var webView = UIWebView()
    
    override func loadView() {
        //进行页面替换
        view = webView
       // view.backgroundColor = UIColor.redColor()
        //设置标题
        title = "新浪微博登陆"
        //设置代理前必须先设置代理
        webView.delegate = self
    
        //2 添加左侧UIBarButtonItem
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: .Plain, target: self, action: "backFatherVC")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: .Plain, target: self, action: "autoFill")

    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
  
        //3 webView加载网络请求.
        //NetworkTools.sharedTools.oauthURL为类对象的属性，无法引用NetworkTools.oauthURL
        //测试网页能够通
//        let urlstring = "http://www.baidu.com"
//        let url = NSURL(string: urlstring)
//        self.webView.loadRequest(NSURLRequest(URL: url!))
        
        self.webView.loadRequest(NSURLRequest(URL: NetworkTools.sharedTools.oauthURL))

    }
    
    // MARK -返回上一级控制器
    @objc private func backFatherVC() {
        
        //弹出控制器
        dismissViewControllerAnimated(true) { () -> Void in
            //取消进度动画
            SVProgressHUD.dismiss()
        }
    }
    /// 自动填充用户名和密码 － web 注入（以代码的方式向web页面添加内容）
    @objc private func autoFill() {
        
        let js = "document.getElementById('userId').value = '15011444205';" +
        "document.getElementById('passwd').value = '451502435';"
        
        // 让 webView 执行 js
        webView.stringByEvaluatingJavaScriptFromString(js)
    }
}
// mark - 遵循UIWebViewDelegate的代理
extension OAuthViewController: UIWebViewDelegate{
    /// 将要加载请求的代理方法
    /// - parameter webView:        webView
    /// - parameter request:        将要加载的请求
    /// - parameter navigationType: navigationType，页面跳转的方式
    ///
    /// - returns: 返回 false 不加载，返回 true 继续加载
    /// 如果 iOS 的代理方法中有返回 bool，通常返回 true 很正常，返回 false 不能正常工作
    // MARK - 实现webView的代理方法
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
       //print(request)
        // <NSMutableURLRequest: 0x7fa71b0eea90> { URL: http://www.baidu.com/?code=5a361eb15f0ed4d8fd4233316c4a3177 }
        //拦截加载百度网页
        //1 判断访问请求是否存在，且的主机是百度，如果不是则加载
        guard let url = request.URL where url.host == "www.baidu.com" else {
            return  true
        }
        //2 从url连接中检查“code”是否存在"code=",query指的是“？”后边的code=5a361eb15f0ed4d8fd4233316c4a3177
        guard let query = url.query where query.hasPrefix("code=") else {
            //不存在直接返回：要你何用
            return false
        }

        //执行到这里说明已经存在了 
        let code = query.substringFromIndex("code=".endIndex)
        //print("授权码："+code)
        UserAccountViewModel.sharedUserAccountViewModel.loadAccessToken(code) { (isSuccess) -> () in
            
            if isSuccess {
                //显示登录成功退出这个控制器,向消息中心发送切换控制器消息
                self.dismissViewControllerAnimated(false, completion: { () -> Void in
                    //释放这一步一定要在释放控制器后边执行，不然无法释放
                    SVProgressHUD.dismiss()
 
                NSNotificationCenter.defaultCenter().postNotificationName("WBNSNotificationCenterChangeViewController", object: "welcome")
                   
                })
                
            }
            else{
                
                SVProgressHUD.showInfoWithStatus("网络不给力！换个姿势")
                
                delayTime(1.0, finished: { () -> () in
                    
                    //返回到父视图
                    self.backFatherVC()
                })
            }
        }
        return false
    }
    
    //
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }

}
